AWS Elemental MediaConnectにVLC media playerから映像伝送してみた #reinvent #mediaservice
はじめに
清水です。先日のre:Invent2018でリリースされた注目の新サービス「AWS Elemental MediaConnect」、本エントリではVLC media playerからAWS Elemental MediaConnectに映像を伝送してみました。伝送後の映像はさらにAWS Elemental MediaLiveに配信し、通常のライブ配信と同様にAWS Elemental MediaStore、Amazon CloudFrontと連携させて視聴を確認してみました。構成図としては下記のようになります。
AWS Elemental MediaConnectでFlowを作成する
まずはAWS Elemental MediaConnectでFlowを作成します。マネージメントコンソールから[Create Flow]で進みます。
名称などを入力していきます。SourceのProtocolですが、今回はRTPを選択します。Ingest portは5432とし、Whitelist CIDR blockを適切に入力、[Create flow]ボタンでFlowを作成します。
作成後、実際にFlowを稼働させるためには[Start]ボタンでStartさせる必要がありますが、これは伝送開始時に行います。続いてMediaLiveのリソースを作成していきます。
AWS Elemental MediaLive、AWS Elemental MediaStore、Amazon CloudFrontのリソース準備
MediaLive、MediaStore、そしてCloudFrontのリソース作成については、通常のライブ配信の場合と変わりありません。MediaLiveのInput作成時にInput typeをMediaConnect Flowにする点だけ注意しましょう。FlowのARNを入力してInputを作成します。
続いて出力先をMediaStoreとして、MediaLiveのChannelを作成していきます。MediaLiveの出力形式はHLSとしました。詳細な手順については下記をご参照ください。
またMediaStoreをオリジンとしてCloudFrontディストリビューションも作成しておきます。
VLC media playerから映像を伝送し配信を確認する
AWS側のリソース、AWS Elemental MediaConnect、AWS Elemental MediaLive、AWS Elemental MediaStore、Amazon CloudFrontの準備ができたら、VLC media playerからRTPプロトコルで映像をMediaConnectに伝送してみます。まずはMediaConnectのFlow、MediaLiveのChannelをそれぞれStartさせます。
MediaConnectのFlowがACTIVE状態、MediaLiveのChannelがRunning状態になったら、いざ、VLC media playerから映像を伝送してみます。今回は以下の環境のmaxOS/VLC media playerで検証しました。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G3025 $ /Applications/VLC.app/Contents/MacOS/VLC --version VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332) VLCバージョン 3.0.4 Vetinari (3.0.4-0-gf615db6332) d-fuによってd-fus-Mac.local (Aug 9 2018 19:23:50)上でコンパイルされました コンパイラー: clang: warning: argument unused during compilation: '-mmacosx-version-min=10.7' [-Wunused-command-line-argument] 法律によって認められる範囲で、このプログラムにはいかなる保証もありません。 あなたは、GNU GPLの条項に基づいて再頒布することが可能です。 詳細については、COPYINGというファイルに書かれていますので、参照してください。 VideoLANチーム(AUTHORSファイルを参照してください)によって作成されました。
VLC media playerからの映像伝送はコマンドラインで行います。伝送する映像はBig Buck BUNNYのmp4ファイルを使用しました。以下のコマンドでRTP形式でMediaConnectに映像を伝送します。(--soutオプションのdst=52.XXX.XXX.XXXの箇所にMediaConnect FlowのIngest IP addressを入力します。)
$ /Applications/VLC.app/Contents/MacOS/VLC \ --loop bbb_sunflower_1080p_30fps_normal.mp4 \ --sout='#transcode{vcodec=h264,vb=5000,acodec=mpga,ab=128,channels=2,samplerate=44100} :rtp{dst=52.XXX.XXX.XXX.XXX,port=5432,mux=ts,name="MediaConnectFlowSource"}'
伝送開始後、MediaConnect、MediaLiveそれぞれに映像が伝送されていることをまず確認しましょう。MediaConnectについてはCloudWatchからメトリクスを確認できます。今回はSourcdeBitRateのメトリクスで確認しました。
MediaLiveについてはHealthタブでNetwork inの項目を確認します。
きちんと映像が伝送できているようなら、実際にCloudFrontを経由して映像を確認してみます。今回はMediaLiveからHLSで出力していますので、macOSのSafariから直接m3u8ファイルを開いてみました。
MediaConnectを通して伝送した映像が視聴できました!
まとめ
re:Invent2018で発表された新サービスAWS Elemental MediaConnectにVLC media playerから映像を伝送、MediaConnectを経由してAWS Elemental MediaLiveを使って配信してみました。
実は今回一番引っかかったポイントは、AWS Elemental MediaConnectに対応するプロトコルで映像を伝送するところでした。対応しているRTP、RTP-FEC、Zixi Protocolに対応する配信エンコーダがなかなか見つからなかったのですが、下記のAWS BlogのエントリからVLC media playerがRTP対応していることを知り、ドキュメントを元に試してみたところ動いた!という具合でした。